﻿using System;

namespace ControleRepresentante.Logic.Models
{
    public class Endereco : ModelBase
    {
        public virtual EnderecoType Tipo { get; set; }
        public virtual string Rua { get; set; }
        public virtual string Numero { get; set; }
        public virtual string Complemento { get; set; }
        public virtual string Bairro { get; set; }
        public virtual string CEP { get; set; }
        public virtual string Cidade { get; set; }
        public virtual string Estado { get; set; }
        public virtual string Observacao { get; set; }
        public virtual bool Principal { get; set; }
        protected internal virtual DetailsHolder DetailsHolder { get; set; }

        public virtual string ToEnderecoFieldString()
        {
            return GetEnderecoFieldString(Rua, Numero, Complemento);
        }

        internal static string GetEnderecoFieldString(string rua, string numero, string complemento)
        {
            if (string.IsNullOrEmpty(rua))
            {
                return String.Empty;
            }
            string result = rua + " " + numero;
            if (!String.IsNullOrEmpty(complemento))
            {
                result += ", " + complemento;
            }
            return result;
        }
    }

    public enum EnderecoType
    {
        Residencial,
        Comercial,
        Outro
    }

    public class ClienteEndereco : Endereco
    {
        public ClienteEndereco(Endereco endereco, Cliente cliente)
        {
            EnderecoCobranca = cliente.EnderecoCobranca != null && cliente.EnderecoCobranca.Id == endereco.Id;
            EnderecoEntrega = cliente.EnderecoEntrega != null && cliente.EnderecoEntrega.Id == endereco.Id;
            Bairro = endereco.Bairro;
            CEP = endereco.CEP;
            Cidade = endereco.Cidade;
            Complemento = endereco.Complemento;
            DetailsHolder = endereco.DetailsHolder;
            Estado = endereco.Estado;
            Id = endereco.Id;
            Numero = endereco.Numero;
            Observacao = endereco.Observacao;
            Principal = endereco.Principal;
            Rua = endereco.Rua;
            Tipo = endereco.Tipo;
        }

        public bool EnderecoEntrega { get; private set; }
        public bool EnderecoCobranca { get; private set; }
    }
}
